﻿using GiveMeMenu.Service.MessageContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace GiveMeMenu.Service
{
    /// <summary>
    /// GMM Services
    /// </summary>
    [ServiceContract]
    public interface IGMMService
    {
        /// <summary>
        /// Gets all dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseGetAllDishs GetAllDishes(RequestGetAllDishs request);

        /// <summary>
        /// Removes the order.
        /// </summary>
        /// <param name="OId">The O id.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseRemoveOrder RemoveOrder(RequestRemoveOrder request);

        /// <summary>
        /// Removes the order information.
        /// </summary>
        /// <param name="OId">The O id.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseRemoveOrderInformation RemoveOrderInformation(RequestRemoveOrderInformation request);

        /// <summary>
        /// Gets the dish today.
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        ResponseGetDishToday GetDishToday(RequestGetDishToday request);

        /// <summary>
        /// Adds the dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseAddDish AddDish(RequestAddDish request);

        /// <summary>
        /// Adds the order.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseAddOrder AddOrder(RequestAddOrder request);

        /// <summary>
        /// Adds the order information.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseAddOrderInformation AddOrderInformation(RequestAddOrderInformation request);

        /// <summary>
        /// Addlus the table.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseAddluTable AddluTable(RequestAddluTable request);

        /// <summary>
        /// Addlus the type dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseAddluTypeDish AddluTypeDish(RequestAddluTypeDish request);

        /// <summary>
        /// Getlus the tables.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseGetluTables GetluTables(RequestGetluTables request);

        /// <summary>
        /// Getlus the type dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseGetluTypeDish GetluTypeDish(RequestGetluTypeDish request);

        /// <summary>
        /// Gets the order information by order id.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseGetOrderInformationByOrderId GetOrderInformationByOrderId(RequestGetOrderInformationByOrderId request);

        /// <summary>
        /// Removes the dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseRemoveDish RemoveDish(RequestRemoveDish request);

        /// <summary>
        /// Removelus the table.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseRemoveluTable RemoveluTable(RequestRemoveluTable request);

        /// <summary>
        /// Removelus the type dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseRemoveluTypeDish RemoveluTypeDish(RequestRemoveluTypeDish request);

        /// <summary>
        /// Updates the dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseUpdateDish UpdateDish(RequestUpdateDish request);

        /// <summary>
        /// Updatelus the table.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseUpdateluTable UpdateluTable(RequestUpdateluTable request);

        /// <summary>
        /// Lus the type dish.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseUpdateluTypeDish UpdateluTypeDish(RequestUpdateluTypeDish request);

        /// <summary>
        /// Updates the order.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        [OperationContract]
        ResponseUpdateOrder UpdateOrder(RequestUpdateOrder request);
    }
}
